const jwt = require('jsonwebtoken');
const {JWT_SECRET} = require('../config/config.default')
const {tokenExpiredError,invaliToken,hasNotAdminPermisson} = require('../constant/err.type')

// 验证token是否过期
const auth = async(ctx,next)=>{
    const {authorization} =ctx.request.header  //获取token
    const token =authorization.replace('Bearer ','') //将Bearer替换为空
    // console.log(token);
    try{
        //user中包含了payload中的信息，即id,user_name,is_admin
        const user = jwt.verify(token,JWT_SECRET) //验证token
        ctx.state.user = user //将user信息存入ctx.state中 
    } catch (err) {
        switch(err.name){
            case 'TokenExpiredError':
                console.error('token已过期',err);
                 ctx.app.emit('error',tokenExpiredError,ctx)
                 return; 
            case 'JsonWebTokenError':
                console.error('无效的token',err);
                ctx.app.emit('error',invaliToken,ctx)
                return;
        }
    }



    await next()
}

//是否为管理员
const hadAdminPermission=async(ctx,next)=>{
    const {is_admin} = ctx.state.user
    if(!is_admin){
        console.error('该用户没有管理员权限',ctx.state.user);
        ctx.app.emit('error',hasNotAdminPermisson,ctx)
        return;
    }
    await next()

}
module.exports={
    auth,
    hadAdminPermission
}